package com.yeti.domain;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;

@Entity
public class Cliente extends User implements Serializable{
	

	private static final long serialVersionUID = 1L;
	
	@NotEmpty
	private String nombre;
	
	@NotEmpty
	private String apellido1;
	
	@NotEmpty
	private String apellido2;
	
	@NotEmpty
	private String direccion;
	
	@Length(min=9,max=15)
	private String telefono;
	
	@DateTimeFormat(pattern="dd/MM/yyyy")
    @Past
	private Date fechaNacimiento;
	
	@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinTable(name = "cliente_lista", catalog = "lista_compra", joinColumns = { 
			@JoinColumn(name = "CLIENTE_ID", nullable = false, updatable = false) }, 
			inverseJoinColumns = { @JoinColumn(name = "LISTA_ID", 
					nullable = false, updatable = false) })
	private List<Lista> listas;

	
	public Cliente(){
		listas = new ArrayList<Lista>();
	}
	
	public String getNombre() {
		return this.nombre;
	}
	    
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getApellido1() {
		return this.apellido1;
	}
	    
	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}
	
	public String getApellido2() {
		return this.apellido2;
	}
	    
	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}
	
	public String getDireccion() {
		return this.direccion;
	}
	    
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	
	public String getTelefono() {
		return this.telefono;
	}
	    
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	
	public Date getFechaNacimiento() {
		return this.fechaNacimiento;
	}
	    
	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	
	public void setListas(List<Lista> listas){
		this.listas = listas;
	}
	
	public List<Lista> getListas(){
		return this.listas;
	}
	
	public void addLista(Lista lista){
		this.listas.add(lista);
	}

	public void removeLista(Lista l) {
		this.listas.remove(l);
	}

	public void removeLista(int i) {
		this.listas.remove(i);
	}
	
}
